/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.yaps.petstore.service;

import com.yaps.petstore.dto.CartItem;
import com.yaps.petstore.entity.catalog.Item;
import com.yaps.petstore.util.Constants;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

/**
 *
 * @author belhassine
 */
@Scope("session")
@Service("ShoppingCartService")
public class ShoppingCartService implements IShoppingCartService{

    private List<CartItem> cartItems;

    private final String cname = this.getClass().getName();
    private Logger logger = Logger.getLogger(Constants.LOGGER_STATEFUL);
    
    public ShoppingCartService()
    {
        cartItems = new ArrayList<CartItem>();
    }
    
    @Override
    public void addItem(Item item) {
         String mname = "addItem";
        logger.entering(cname, mname, item);

        boolean itemFound = false;
        for (CartItem cartItem : cartItems) {
            // Si l'article existe déjà dans le panier, on modifie uniquement sa quantité
            if (cartItem.getItem().equals(item)) {
                cartItem.setQuantity(cartItem.getQuantity() + 1);
                itemFound = true;
            }
        }
        if (!itemFound)
            // Sinon on le rajoute dans le panier
            cartItems.add(new CartItem(item, 1));

        logger.exiting(cname, mname, cartItems.size());
    }

    @Override
    public void removeItem(Item item) {
        String mname = "removeItem";
        logger.entering(cname, mname, item);

        for (CartItem cartItem : cartItems) {
            if (cartItem.getItem().equals(item)) {
                cartItems.remove(cartItem);
                return;
            }
        }

        logger.exiting(cname, mname, cartItems.size());
    }

    @Override
    public Float getTotal() {
        String mname = "getTotal";
        logger.entering(cname, mname);

        if (cartItems == null || cartItems.isEmpty())
            return 0f;

        Float total = 0f;

        // sum up the quantities
        for (CartItem cartItem : cartItems) {
            total += (cartItem.getSubTotal());
        }

        logger.exiting(cname, mname, total);
        return total;
    }

    @Override
    public void empty() {
        String mname = "empty";
        logger.entering(cname, mname);

        cartItems.clear();
    }

    @Override
    public List<CartItem> getCartItems() {
        return cartItems;
    }
    
}
